package com.wawayaya.util;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * @author David
 * 
 * @date
 */
public class TimeZoneUtil {

	private static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm") ;
	private static DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
	/**
	 * 判断用户的设备时区是否为东八区（中国） 2014年7月31日
	 * @return
	 */
	public static boolean isInEasternEightZones() {
		boolean defaultVaule = true;
		if (TimeZone.getDefault() == TimeZone.getTimeZone("GMT+08"))
			defaultVaule = true;
		else
			defaultVaule = false;
		return defaultVaule;
	}

	/**
	 * 根据不同时区，转换时间 2014年7月31日
	 * @param
	 * @return
	 */
	public static Date transformTime(Date date, TimeZone oldZone, TimeZone newZone) {
		Date finalDate = null;
		if (date != null) {
			int timeOffset = oldZone.getOffset(date.getTime())
					- newZone.getOffset(date.getTime());
			finalDate = new Date(date.getTime() - timeOffset);
		}
		return finalDate;
	}

	/**
	 * 得到UTC时间，类型为字符串，格式为"yyyy-MM-dd HH:mm"<br />
	 * 如果获取失败，返回null
	 * @return
	 */
	public static String getUTCTimeStr() {
		SimpleDateFormat _format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		StringBuffer UTCTimeBuffer = new StringBuffer();
		// 1、取得本地时间：
		Calendar cal = Calendar.getInstance() ;
		// 2、取得时间偏移量：
		int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
		// 3、取得夏令时差：
		int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
		// 4、从本地时间里扣除这些差量，即可以取得UTC时间：
		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH)+1;
		int day = cal.get(Calendar.DAY_OF_MONTH);
		int hour = cal.get(Calendar.HOUR_OF_DAY);
		int minute = cal.get(Calendar.MINUTE);
		int second = cal.get(Calendar.SECOND);
		UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day) ;
		UTCTimeBuffer.append(" ").append(hour).append(":").append(minute).append(":").append(second) ;
		try{
			Date _date = _format.parse(UTCTimeBuffer.toString());
			//System.out.println("UTCTimeBuffer.toString():"+UTCTimeBuffer.toString());
			//System.out.println("System.currentTimeMillis()/1000:"+(System.currentTimeMillis()/1000));
			//System.out.println("_date.getTime()/1000:"+(_date.getTime()/1000));
			return String.valueOf(_date.getTime());// UTCTimeBuffer.toString() ;
		}catch(ParseException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 将UTC时间转换为东八区时间
	 * @param UTCTime
	 * @return
	 */
	public static String getLocalTimeFromUTC(String UTCTime){
		java.util.Date UTCDate = null ;
		String localTimeStr = null ;
		try {
			UTCDate = format.parse(UTCTime);
			format.setTimeZone(TimeZone.getTimeZone("GMT-8")) ;
			localTimeStr = format.format(UTCDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return localTimeStr ;
	}

	/**
	 * 获取long型的UTC时间
	 * @return
	 */
	public static Long getCurrentUTCTimeAsLong(){
		// return Long.parseLong(UTCTimeUtil.getUTCTimeStr());
		return System.currentTimeMillis();
	}

	/**
	 * 获取timestamp格式的UTC时间
	 * @return
	 */
	public static Timestamp getCurrentUTCTimeAsTimestamp(){
		Timestamp _timestamp = new Timestamp(getCurrentUTCTimeAsLong());
		return _timestamp;
	}

	/**
	 * 获取日期字符串。
	 * @return String "yyyyMMdd"格式的日期字符串。
	 */
	public static String getCurentDate() {
		return format2.format(new Date());
	}
	public static void main(String[] args) {
		String UTCTimeStr = getUTCTimeStr() ;
		System.out.println(UTCTimeStr);
		//System.out.println(getLocalTimeFromUTC(UTCTimeStr));
	}
}
